const cityData = [
  {
    parentValue: 1,
    value: 11,
    label: "北京市",
  },
  {
    parentValue: 11,
    value: 111,
    label: "东城区",
  },
  {
    parentValue: 11,
    value: 112,
    label: "西城区",
  },
  {
    parentValue: 1,
    value: 12,
    label: "上海市",
  },
  {
    parentValue: 12,
    value: 121,
    label: "黄浦区",
  },
  {
    parentValue: 12,
    value: 122,
    label: "徐汇区",
  },
  {
    parentValue: 1,
    value: 13,
    label: "广东省",
  },
  {
    parentValue: 13,
    value: 131,
    label: "广州市",
  },
  {
    parentValue: 131,
    value: 1311,
    label: "天河区",
  },
  {
    parentValue: 131,
    value: 1312,
    label: "越秀区",
  },
  {
    parentValue: 132,
    value: 1321,
    label: "南山区",
  },
  {
    parentValue: 132,
    value: 1322,
    label: "罗湖区",
  },
  {
    value: 1,
    label: "中国",
  },
  {
    parentValue: 13,
    value: 132,
    label: "深圳市",
  },
];

/* *
 1.请利用递归方法实现一个函数，把上方数据递归成有层级的数据，
 2.把value字段变成id字段，label字段变成title字段，children字段变成child字段，
 3.去掉parentValue字段，最终得到以下数据。需要一模一样的数据
 ⚠️注意：不允许使用三层循环，请使用递归方法
 [
    {
        id: 1,
        title: '中国',
        child: [
            {
                id: 11,
                title: '北京市',
                child: [
                    {
                        id: 111,
                        title: '东城区'
                    },
                    {
                        id: 112,
                        title: '西城区'
                    }
                ]
            },
            {
                id: 12,
                title: '上海市',
                child: [
                    {
                        id: 121,
                        title: '黄浦区'
                    },
                    {
                        id: 122,
                        title: '徐汇区'
                    }
                ]
            },
            {
                id: 13,
                title: '广东省',
                child: [
                    {
                        id: 131,
                        title: '广州市',
                        child: [
                            {
                                id: 1311,
                                title: '天河区'
                            },
                            {
                                id: 1312,
                                title: '越秀区'
                            }
                        ]
                    },
                    {
                        id: 132,
                        title: '深圳市',
                        child: [
                            {
                                id: 1321,
                                title: '南山区'
                            },
                            {
                                id: 1322,
                                title: '罗湖区'
                            }
                        ]
                    }
                ]
            }
        ]
    }
]
 * */

// 具体实现
const getArea = (data) => {
  // 递归查找节点
  const findNode = (parentId) => {
    const children = [];

    for (const item of data) {
      if (item.parentValue === parentId) {
        const node = {
          id: item.value,
          title: item.label,
        };

        const grandchildren = findNode(item.value);
        if (grandchildren.length > 0) {
          node.child = grandchildren;
        }

        children.push(node);
      }
    }

    return children;
  };

  // 查找根节点
  let root;

  for (const item of data) {
    if (!item.parentValue) {
      root = {
        id: item.value,
        title: item.label,
      };
      break;
    }
  }

  // 获取所有子节点
  const children = findNode(1);
  if (children.length > 0) {
    root.child = children;
  }

  // 返回结果数组
  return [root];
};

const result = getArea(cityData);
console.log(JSON.stringify(result, null, 2));
